﻿#region Using

using System;
using System.ComponentModel;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;

#endregion Using

namespace T4_Eind_programma
{
    public partial class BatchOverzicht : Form
    {
        #region Variable Declaration

        private const string statusBezig = "Bezig";
        private BatchScherm mijnBatchScherm;
        private Hoofdscherm mijnHoofdscherm;
        private Order mijnOrder;
        private Order orderCheck;

        private bool wijzigenActief = false;

        #endregion Variable Declaration

        #region Properties

        public Order MijnOrder
        {
            get { return mijnOrder; }
            set { mijnOrder = value; }
        }

        public Order OrderCheck
        {
            get { return orderCheck; }
            set { orderCheck = value; }
        }

        public bool WijzigenActief
        {
            get { return wijzigenActief; }
            set { wijzigenActief = value; }
        }

        #endregion Properties

        #region Constructor

        public BatchOverzicht(Order mijnOrder, Hoofdscherm mijnHoofdscherm)
        {
            InitializeComponent();
            this.mijnHoofdscherm = mijnHoofdscherm;
            this.mijnOrder = mijnOrder;
            orderCheck = mijnOrder;
            int nieuwnummer = 0;

            foreach (Mengbatch batch in mijnOrder.MengbatchList)// historie lijst ipv orderList
            {
                if (batch.Nummer >= nieuwnummer)
                {
                    nieuwnummer = batch.Nummer + 1;
                }
            }
            if (mijnOrder.MengbatchList.Count == 0)
            {
                InitializeToevoegen(nieuwnummer);
            }
            mijnOrder.MengbatchList.ListChanged += mengbatchList_ListChanged;
            RefreshListView();
        }

        #endregion Constructor

        #region Button Clicks

        private void btnToevoegen_Click(object sender, EventArgs e)
        {
            int nieuwnummer = 0;

            foreach (Mengbatch batch in mijnOrder.MengbatchList)// historie lijst ipv orderList
            {
                if (batch.Nummer >= nieuwnummer)
                {
                    nieuwnummer = batch.Nummer + 1;
                }
            }

            mijnBatchScherm = new BatchScherm(this, new Mengbatch(nieuwnummer, false));
            mijnBatchScherm.Closing += new System.ComponentModel.CancelEventHandler(OnSearchClosingToevoegen);
            this.Enabled = false;
            mijnBatchScherm.Show();
        }

        private void btnWijzigen_Click(object sender, EventArgs e)
        {
            if (listBatch.SelectedItems.Count > 0)
            {
                if (mijnOrder.MengbatchList[listBatch.SelectedItems[0].Index].Status != statusBezig)
                {
                    mijnBatchScherm = new BatchScherm(this, mijnOrder.MengbatchList[listBatch.SelectedItems[0].Index]);
                    mijnBatchScherm.Closing += new System.ComponentModel.CancelEventHandler(OnSearchClosingWijzigen);
                    this.Enabled = false;
                    mijnBatchScherm.Show();
                }
                else
                {
                    mijnHoofdscherm.AddToLog("De batch die u geselecteerd heeft wordt uitgevoerd.", Color.Red);
                }
            }
        }

        private void ListViewItemDoubleClicked(object sender, EventArgs e)
        {
            try
            {
                Mengbatch mengbatch = mijnOrder.MengbatchList.Where
    (mengbatchItem => mengbatchItem.Nummer == Convert.ToInt32(listBatch.SelectedItems[0].SubItems[0].Text)).Single();
                VulbatchScherm mijnHistorieVulBatch = new VulbatchScherm(mengbatch);
                mijnHistorieVulBatch.Closing += new System.ComponentModel.CancelEventHandler(OnSearchClosingVulbatch);
                this.Enabled = false;
                mijnHistorieVulBatch.Show();
            }
            catch (Exception)
            {
            }
        }

        #endregion Button Clicks

        #region Events

        private void BatchOverzicht_FormClosed(object sender, FormClosedEventArgs e)
        {
            if (mijnBatchScherm != null && mijnBatchScherm.IsDisposed == false)
                mijnBatchScherm.Dispose();
        }

        private void listBatch_KeyDown(object sender, KeyEventArgs e)
        {
            int huidigIndex = 0;
            int nieuweIndex = 0;
            if (e.KeyCode == Keys.Up)
            {
                if (listBatch.SelectedItems.Count > 0 &&
                    listBatch.SelectedItems[0].Index != listBatch.Items[0].Index)
                {
                    huidigIndex = listBatch.SelectedItems[0].Index;
                    nieuweIndex = huidigIndex - 1;
                    Mengbatch tempMengbatch = mijnOrder.MengbatchList[huidigIndex];
                    if (tempMengbatch.Status == "Bezig")
                    {
                        mijnHoofdscherm.AddToLog("Mengbatch is bezig en kan hierdoor niet van positie veranderd worden.", Color.Red);
                        return;
                    }
                    Mengbatch tempMengbatchNieuw = mijnOrder.MengbatchList[nieuweIndex];
                    mijnOrder.MengbatchList[huidigIndex] = tempMengbatchNieuw;
                    mijnOrder.MengbatchList[nieuweIndex] = tempMengbatch;
                    listBatch.Items[huidigIndex].Selected = true;
                    listBatch.Items[huidigIndex].Focused = true;
                }
            }
            else if (e.KeyCode == Keys.Down)
            {
                if (listBatch.SelectedItems.Count > 0 &&
                    listBatch.SelectedItems[0].Index != listBatch.Items[listBatch.Items.Count - 1].Index)
                {
                    huidigIndex = listBatch.SelectedItems[0].Index;
                    nieuweIndex = huidigIndex + 1;
                    Mengbatch tempMengbatch = mijnOrder.MengbatchList[huidigIndex];
                    if (tempMengbatch.Status == "Bezig")
                    {
                        mijnHoofdscherm.AddToLog("Mengbatch is bezig en kan hierdoor niet van positie veranderd worden.", Color.Red);
                        return;
                    }
                    Mengbatch tempMengbatchNieuw = mijnOrder.MengbatchList[nieuweIndex];
                    mijnOrder.MengbatchList[huidigIndex] = tempMengbatchNieuw;
                    mijnOrder.MengbatchList[nieuweIndex] = tempMengbatch;
                    listBatch.Items[huidigIndex].Selected = true;
                    listBatch.Items[huidigIndex].Focused = true;
                }
            }
            else if (e.KeyCode == Keys.Delete)
            {
                if (listBatch.SelectedItems.Count == 1)
                {
                    Mengbatch mengbatch = mijnOrder.MengbatchList.Where(orderItem => orderItem.Nummer == Convert.ToInt32(listBatch.SelectedItems[0].Text)).First();
                    if (mengbatch.Status != statusBezig)
                        mijnOrder.MengbatchList.Remove(mengbatch);
                    else
                        mijnHoofdscherm.AddToLog("De batch die u geselecteerd heeft wordt uitgevoerd.", Color.Red);
                }
            }
            listBatch.Focus();
        }

        private void mengbatchList_ListChanged(object sender, ListChangedEventArgs e)
        {
            RefreshListView();
        }

        private void OnSearchClosingToevoegen(object sender, System.ComponentModel.CancelEventArgs e)
        {
            if (mijnBatchScherm.DialogResult == DialogResult.OK)
            {
                mijnBatchScherm.MijnMengbatch.GenereerProductcode(mijnOrder.Nummer);
                mijnBatchScherm.MijnMengbatch.GenereerVulbatchList(mijnBatchScherm.MijnMengbatch.Doeltank);
                mijnOrder.MengbatchList.Add(mijnBatchScherm.MijnMengbatch);
            }
            this.Enabled = true;
        }

        private void OnSearchClosingVulbatch(object sender, System.ComponentModel.CancelEventArgs e)
        {
            this.Enabled = true;
        }

        private void OnSearchClosingWijzigen(object sender, System.ComponentModel.CancelEventArgs e)
        {
            mijnBatchScherm.MijnMengbatch.GenereerVulbatchList((mijnBatchScherm.MijnMengbatch.Doeltank));
            this.Enabled = true;
        }

        #endregion Events

        private void InitializeToevoegen(int nummer)
        {
            mijnBatchScherm = new BatchScherm(this, new Mengbatch(nummer, false));
            mijnBatchScherm.Closing += new System.ComponentModel.CancelEventHandler(OnSearchClosingToevoegen);
            this.Enabled = false;
            mijnBatchScherm.Show();
        }

        private void RefreshListView()
        {
            try
            {
                listBatch.Items.Clear();
                foreach (Mengbatch batch in mijnOrder.MengbatchList)
                {
                    if (batch.Klaar == false)
                    {
                        ListViewItem lv = new ListViewItem(batch.Nummer.ToString());
                        lv.SubItems.Add(batch.Productcode.ToString());
                        lv.SubItems.Add(batch.Smaak.Naam);
                        lv.SubItems.Add(batch.Hoeveelheid.ToString());
                        lv.SubItems.Add(batch.SiroopPercentage.ToString());
                        lv.SubItems.Add(batch.Mengtijd.ToString());
                        lv.SubItems.Add(batch.Verwarmen.ToString());
                        lv.SubItems.Add(batch.Handmatig.ToString());
                        if (batch.Doeltank.Count > 1)
                        {
                            lv.SubItems.Add(batch.Doeltank[0].Nummer + "," + batch.Doeltank[1].Nummer);
                        }
                        else
                        {
                            lv.SubItems.Add(batch.Doeltank[0].Nummer.ToString());
                        }
                        lv.SubItems.Add(batch.Klaar.ToString());
                        lv.SubItems.Add(batch.Status);
                        listBatch.Items.Add(lv);
                    }
                }
                listBatch.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
            }
            catch (Exception)
            {
            }
        }
    }
}